package LeetCode刷题;

/**
 * @program: Java_Study
 * @author: Xiaofan
 * @createTime: 2022-01-07 09:54
 * @description: Functions of this class is
 * 官方题解（使用滚动数组实现）：
 *class Solution {
 *     public int translateNum(int num) {
 *         if(num<10){
 *             return 1;
 *         }
 *         //使用滚动数组配合动态规划来做
 *         String s=String.valueOf(num);
 *         int len=s.length();
 *         String temp=s.substring(0,2);
 *         int ppTot=1;
 *         ！！！！！！！！！！！！！！！！！！这里比较这里记住一定要用“两位数：25/10”来比较！！！！！！！！！！！！！！要清楚compareTo()的原理！！！！！！！
 *         int pTot=(temp.compareTo("25")<=0&&temp.compareTo("10")>=0)?2:1;//如果前两个字符可以连成一个字符的话就又多了一种
 *         int ans=pTot;
 *         for(int i=2;i<len;i++){
 *             temp=s.substring(i-1,i+1);//将当前的子串取出来
 *             ans=(temp.compareTo("25")<=0&&temp.compareTo("10")>=0)?(ppTot+pTot):pTot;//然后进行判断是否可以取两个
 *             ppTot=pTot;
 *             pTot=ans;
 *             //dp[i]=(c[i-1]=='1'||(c[i-1]=='2'&&c[i]-'0'<=5))?(dp[i-1]+dp[i-2]):dp[i-1];
 *         }
 *         return ans;
 *     }
 * }
 *
 * （动态规划）类似跳台阶的问题但是有额外的限制条件
 *         举例：给定数字 122 一共有三种翻译的可能 第一种bcc 122 第二种 bw 1 22 第三种 mc 12 2
 *         可以观察出当从左向右遍历时，存在选择选一格字符或者选两个字符的情况 类似跳一格或者跳两格
 *         但是题目给出了限制条件 当想要跳两格的时候 所选的二位数满足 >=10且<=25 ，当0作为十位数前置位时，不可取
 *         如果不满足上诉条件  则不存在跳两格 只能跳一格的形式到达目标
 *
 *         所以当num[i-1,i] 拼接成的十位数 >=10且<=25 时 有 dp[i] = dp[i-1] + dp[i-2] 即跳两格跳一格都可选
 *             当num[i-1,i] 拼接成的十位数 >25或者<10 时 dp[i] = dp[i-1]   即只能选取跳一格的方案
 *
 *class Solution {
 *     public int translateNum(int num) {
 *         if(num<10){
 *             return 1;
 *         }
 *         //使用动态规划来做
 *         String s=String.valueOf(num);
 *         char c[]=s.toCharArray();
 *         int len=c.length;
 *         int dp[]=new int[len];
 *         dp[0]=1;
 *         dp[1]=(c[0]=='1'||(c[0]=='2'&&c[1]-'0'<=5))?2:1;//如果前两个字符可以连成一个字符的话就又多了一种
 *         for(int i=2;i<len;i++){
 *            dp[i]=(c[i-1]=='1'||(c[i-1]=='2'&&c[i]-'0'<=5))?(dp[i-1]+dp[i-2]):dp[i-1];
 *         }
 *         return dp[len-1];
 *     }
 * }
 **/
public class NoNo把数字翻译成字符串md就是青蛙跳台阶问题 {
    public static void main(String[] args) {

    }
}